package config

//
//import (
//	"gameServer/database"
//	"gameServer/log"
//)
//
///* //* 网关配置文件，定义网关服务的所有配置选项，包括服务器、注册中心、负载均衡、事件总线、日志和健康检查等配置 */
//
///*
//更新现有的组件
//*/
//
//// GateConfig 网关配置结构体，包含网关运行所需的所有配置项
//type GateConfig struct {
//	// Server 服务器配置，包含网关服务的网络地址和端口
//	Server struct {
//		// Addr 服务器监听的IP地址，json标签指定JSON序列化时的字段名为"addr"
//		Addr string `json:"addr"`
//		// Port 服务器监听的端口号，json标签指定JSON序列化时的字段名为"port"
//		Port int `json:"port"`
//	} `json:"server"` // 嵌套结构体Server在JSON中的字段名为"server"
//
//	// Registry 注册中心配置，用于服务注册与发现
//	Registry struct {
//		// Type 注册中心类型，支持"memory"(内存)、"etcd"、"consul"等，json标签为"type"
//		Type string `json:"type"`
//		// Addr 注册中心的网络地址（如"127.0.0.1:2379"），json标签为"addr"
//		Addr string `json:"addr"`
//	} `json:"registry"` // 嵌套结构体Registry在JSON中的字段名为"registry"
//
//	// LoadBalance 负载均衡配置，用于网关转发请求时的负载策略
//	LoadBalance struct {
//		// Type 负载均衡算法类型（如"roundrobin"轮询、"random"随机等），json标签为"type"
//		Type string `json:"type"`
//	} `json:"load_balance"` // 嵌套结构体LoadBalance在JSON中的字段名为"load_balance"
//
//	// 数据库配置
//	Database DatabaseConfig `json:"database"`
//
//	// 事件总线配置
//	EventBus struct {
//		Type       string `json:"type"`
//		BufferSize int    `json:"buffer_size"`
//	} `json:"eventbus"`
//
//	// Log 日志配置，用于网关运行日志的输出设置
//	Log struct {
//		Level      string `json:"level"`
//		Format     string `json:"format"`
//		Output     string `json:"output"`
//		FilePath   string `json:"file_path"`
//		MaxSize    int    `json:"max_size"`
//		MaxAge     int    `json:"max_age"`
//		MaxBackups int    `json:"max_backups"`
//	} `json:"log"`
//	// 嵌套结构体Log在JSON中的字段名为"log"
//
//	// 健康检查配置
//	Health struct {
//		CheckInterval int `json:"check_interval"` // 健康检查间隔（秒）
//	} `json:"health"`
//}
//
//// NewGateConfig 创建网关配置实例并设置默认值（最终从文件中获取配置，当前作为默认值）
////
////	返回值：*GateConfig - 网关配置的指针，方便后续修改配置
//func NewGateConfig() *GateConfig {
//	// 创建GateConfig实例（指针类型）
//	config := &GateConfig{}
//	// 设置服务器配置默认值
//	config.Server.Addr = "0.0.0.0" // 默认监听所有网络接口（允许外部访问）
//	config.Server.Port = 52060     // 默认端口号52060
//	// 设置注册中心默认值
//	config.Registry.Type = "memory" // 默认使用内存作为注册中心（适合本地测试）
//	// 设置负载均衡默认值
//	config.LoadBalance.Type = "roundrobin" // 默认使用轮询算法（简单高效的负载策略）
//	config.EventBus.Type = "memory"
//	config.EventBus.BufferSize = 1000
//	// 设置日志默认值
//	config.Log.Level = "info"  // 默认日志级别为info（输出关键运行信息）
//	config.Log.Format = "text" // 默认日志格式为文本（可读性高）
//	config.Log.Output = "stdout"
//	config.Log.FilePath = "logs/game-server.log"
//	config.Log.MaxSize = 100
//	config.Log.MaxAge = 7
//	config.Log.MaxBackups = 10
//	config.Health.CheckInterval = 30 // 默认30秒
//	return config
//}
//
//// LoadFromManager 从配置管理器加载配置，覆盖默认值，需要增加新的配置读取，一定要在这里增加
////
////	参数：manager *Manager - 配置管理器实例，提供根据键获取配置的方法
////
////	作用：从外部配置源（如配置文件、环境变量、日志系统等）加载配置，更新到当前GateConfig实例
//func (g *GateConfig) LoadFromManager(manager *Manager) {
//	// 从管理器加载服务器IP地址，键为"gate.server.addr"（层级结构：网关.服务器.地址）
//	g.Server.Addr = manager.GetString("gate.server.addr")
//	// 从管理器加载服务器端口，键为"gate.server.port"
//	g.Server.Port = manager.GetInt("gate.server.port")
//	// 从管理器加载注册中心类型，键为"gate.registry.type"
//	g.Registry.Type = manager.GetString("gate.registry.type")
//	// 从管理器加载注册中心地址，键为"gate.registry.addr"
//	g.Registry.Addr = manager.GetString("gate.registry.addr")
//	// 从管理器加载负载均衡类型，键为"gate.load_balance.type"
//	g.LoadBalance.Type = manager.GetString("gate.load_balance.type")
//	g.EventBus.Type = manager.GetString("gate.eventbus.type")
//	g.EventBus.BufferSize = manager.GetInt("gate.eventbus.buffer_size")
//	// 从管理器加载日志级别，键为"gate.log.level"
//	g.Log.Level = manager.GetString("gate.log.level")
//	// 从管理器加载日志格式，键为"gate.log.format"
//	g.Log.Format = manager.GetString("gate.log.format")
//	g.Log.Output = manager.GetString("gate.log.output")
//	g.Log.FilePath = manager.GetString("gate.log.file_path")
//	g.Log.MaxSize = manager.GetInt("gate.log.max_size")
//	g.Log.MaxAge = manager.GetInt("gate.log.max_age")
//	g.Log.MaxBackups = manager.GetInt("gate.log.max_backups")
//	g.Health.CheckInterval = manager.GetInt("gate.health.check_interval")
//
//	// 数据库配置
//	g.Database.Main.Type = database.DBType(manager.GetString("gate.database.main.type"))
//	g.Database.Main.Host = manager.GetString("gate.database.main.host")
//	g.Database.Main.Port = manager.GetInt("gate.database.main.port")
//	g.Database.Main.Username = manager.GetString("gate.database.main.username")
//	g.Database.Main.Password = manager.GetString("gate.database.main.password")
//	g.Database.Main.Database = manager.GetString("gate.database.main.database")
//	g.Database.Main.PoolSize = manager.GetInt("gate.database.main.pool_size")
//	g.Database.Main.Timeout = manager.GetInt("gate.database.main.timeout")
//
//	g.Database.Cache.Type = database.DBType(manager.GetString("gate.database.cache.type"))
//	g.Database.Cache.Host = manager.GetString("gate.database.cache.host")
//	g.Database.Cache.Port = manager.GetInt("gate.database.cache.port")
//	g.Database.Cache.Username = manager.GetString("gate.database.cache.username")
//	g.Database.Cache.Password = manager.GetString("gate.database.cache.password")
//	g.Database.Cache.Database = manager.GetString("gate.database.cache.database") // Redis使用数字数据库
//	g.Database.Cache.PoolSize = manager.GetInt("gate.database.cache.pool_size")
//	g.Database.Cache.Timeout = manager.GetInt("gate.database.cache.timeout")
//
//	// 数据库配置 - 日志数据库
//	g.Database.Log.Type = database.DBType(manager.GetString("gate.database.log.type"))
//	g.Database.Log.Host = manager.GetString("gate.database.log.host")
//	g.Database.Log.Port = manager.GetInt("gate.database.log.port")
//	g.Database.Log.Username = manager.GetString("gate.database.log.username")
//	g.Database.Log.Password = manager.GetString("gate.database.log.password")
//	g.Database.Log.Database = manager.GetString("gate.database.log.database")
//	g.Database.Log.PoolSize = manager.GetInt("gate.database.log.pool_size")
//	g.Database.Log.Timeout = manager.GetInt("gate.database.log.timeout")
//}
//
//// ToLogConfig 转换为日志配置
//func (g *GateConfig) ToLogConfig() *log.LogConfig {
//	return &log.LogConfig{
//		Level:      g.Log.Level,
//		Format:     g.Log.Format,
//		Output:     g.Log.Output,
//		FilePath:   g.Log.FilePath,
//		MaxSize:    g.Log.MaxSize,
//		MaxAge:     g.Log.MaxAge,
//		MaxBackups: g.Log.MaxBackups,
//	}
//}
